package com.ccp.dev.system.util;

import com.ccp.dev.core.basic.util.ContextUtil;
import com.ccp.dev.core.util.AppUtil;
import com.ccp.dev.system.model.SysRole;
import com.ccp.dev.system.model.SysUser;
import com.ccp.dev.system.service.SysRoleService;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 获取当前可切换角色。
 * @author jiayueqiao
 *
 */
public class SysRoleUtil {

	private SysRoleUtil(){};
	/**
	 * 取得当前可切换角色
	 * @return SysRole
	 */
	public static SysRole getCurrentRole(HttpServletRequest request) {
		//判断系统是否登录
		SysUser curUser=(SysUser) ContextUtil.getCurrentUser();
		//未登录系统则返回 null。
		if(curUser==null) {
			return null;
		}
		//判断session是否存在可切换角色
		SysRole sysRole=(SysRole) request.getSession().getAttribute(SysRole.CURRENT_SYSROLE);
		//存在则返回
		if(sysRole!=null) {
			return sysRole;
		}
		//判断cookie是否存在
		boolean isCookieExists=CookieUitl.isExistByName(SysRole.CURRENT_SYSROLE,request);
		//cookie不存在则返回为空。
		if(!isCookieExists) {
			return null;
		}
		//从cookie中获取sysroleId，查询角色并放置到session当中。
		String roleId=CookieUitl.getValueByName(SysRole.CURRENT_SYSROLE, request);
		SysRoleService sysRoleService = AppUtil.getBean(SysRoleService.class);
		sysRole=sysRoleService.getOneById(roleId);
		request.getSession().setAttribute(SysRole.CURRENT_SYSROLE,sysRole);	
		return sysRole;
	}
	
	/**
	 * 取得当前可切换角色的ID
	 * @return String
	 */
	public static String getCurrentRoleId(HttpServletRequest request) {
		SysRole sysRole=getCurrentRole(request);
		if(sysRole!=null){
			return sysRole.getRoleId();
		}
		return null;
	}
	
	/**
	 * 取得当前可切换角色的别名
	 * @return String
	 */
	public static String getCurrentRoleAlias(HttpServletRequest request) {
		SysRole sysRole=getCurrentRole(request);
		if(sysRole!=null) {
			return sysRole.getAlias();
		}
		return null;
	}
	
	/**
	 * 删除当前可切换角色。
	 */
	public static void removeRole(HttpServletRequest request, HttpServletResponse response){
		request.getSession().removeAttribute(SysRole.CURRENT_SYSROLE);
		//判断cookie是否存在
		boolean isCookieExists=CookieUitl.isExistByName(SysRole.CURRENT_SYSROLE,request);
		//cookie不存在则返回为空。
		if(isCookieExists) {
			CookieUitl.delCookie(SysRole.CURRENT_SYSROLE, request, response);
		}
	}
}
